package org.wanho;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * Author：汤小洋
 * Date：2023-05-09 9:11
 * Description：<描述>
 */
public class Test09_中间操作 {
    public static void main(String[] args) {
        test3();
    }

    /**
     * 筛选与切片
     */
    public static void test1(){
        // 输出年龄大于29的员工
        Emp.getTestData().stream()
                .filter(e -> e.getAge() > 29)
                .forEach(System.out::println);
        System.out.println("----------------------------------------------");


        // 获取集合中的前4个元素
        Emp.getTestData().stream()
                .limit(4)
                .forEach(e -> System.out.println(e));
        System.out.println("----------------------------------------------");

        // 跳过前15个元素，输出剩余的元素
        Emp.getTestData().stream()
                .skip(15)
                .forEach(System.out::println);
        System.out.println("----------------------------------------------");

        // 去除重复元素
        Emp.getTestData().stream()
                .distinct()
                .forEach(System.out::println);
    }

    /**
     * 映射
     */
    public static void test2(){
        // 提示所有员工的姓名
        Emp.getTestData().stream()
                // .map(e -> e.getName())
                .map(Emp::getName)
                .forEach(System.out::println);
        System.out.println("-----------------------------------");

        // 统计所有员工姓名使用的字符，并输出
        Emp.getTestData().stream()
                .flatMap(e -> {
                    String name = e.getName();
                    String[] arr = name.split("");
                    return Stream.of(arr);
                })
                .distinct()
                .forEach(System.out::println);
        System.out.println("-----------------------------------");

        // 获取所有员工的年龄，要求只显示大于30岁的
        Emp.getTestData().stream()
                .filter(e -> e.getAge()>30)
                .mapToInt(e -> e.getAge())
                .forEach(System.out::println);

        List<Emp> list = Emp.getTestData();
        for(Emp e : list){
            if (e.getAge()>30){
               System.out.println(e.getAge());
            }
        }
    }

    /**
     * 排序
     */
    public static void test3(){
        int[] arr = {12,4,14,34,5,76,23};
        // 升序
        // Arrays.sort(arr);
        Arrays.stream(arr)
                .sorted()
                .forEach(System.out::println);
        System.out.println("--------------------------------");

        // 按工资降序排列
        Emp.getTestData().stream()
                .distinct()
                .sorted((e1,e2) -> (int)(e2.getSalary()-e1.getSalary()))
                .forEach(System.out::println);


    }

}
